﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Control;
using Persistencia;


public partial class RegistroPrincipal_RegistrarClientes : System.Web.UI.Page
{


    #region Atributos

    IControl control;
       ControlAlumno controInicial = new ControlAlumno();
            StateAlumno StateInicial = new StateAlumno();
           
    #endregion

    #region Propiedades

    /// <summary>
    /// Propiedad para el manejo del control
    /// </summary>
    private ControlAlumno controlAlumno
    {
        get
        {
            if (Session["ControlAlumno"] == null) return null;
            else return ((ControlAlumno)Session["ControlAlumno"]);
        }
    }
    /// <summary>
    /// Propiedad para el manejo del state
    /// </summary>
    private StateAlumno stateAlumno
    {
        get
        {
            if (Session["ControlAlumno"] == null) return null;
            else return (StateAlumno)((ControlAlumno)Session["ControlAlumno"]).State;
        }
    }
    #endregion



    protected void Page_Load(object sender, EventArgs e)
    {
        control = controInicial;
        control.State = StateInicial;
        Session["ControlAlumno"] = control;


        Response.Cache.SetNoServerCaching();
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetNoStore();
        Response.Cache.SetExpires(new DateTime(1900, 1, 1, 0, 0, 0, 0));


        if (!Page.IsPostBack)
        {
         
            if (stateAlumno.Usuario.Roll == "Cobrador")
                LinkButton4.Visible = false;

            EnlazarControlesInicio();

            InsertarMensualidades();
            
        }
        control = (ControlAlumno)Session["ControlAlumno"];
    }

    private void InsertarMensualidades()
    {
        DateTime TiempoActual = DateTime.Now;
        controlAlumno.ObtenerTiempos();
        if (TiempoActual.Month.ToString() != stateAlumno.Mes.Trim())
            controlAlumno.CargarMensualidad();

    }

    private void EnlasarGrid()
    {
        GrdRegistros.DataSource = stateAlumno.Alumnos;
        GrdRegistros.DataBind();
    }
    /// <summary>
    /// Metodo Que Inicia El control y el estado de la pagina
    /// </summary>
    private void IniciaContol()
    {
        ControlAlumno controInicial = new ControlAlumno();
        StateAlumno StateInicial = new StateAlumno();
        control = controInicial;
        control.State = StateInicial;
        Session["ControlAlumno"] = control;
    }


    /// <summary>
    /// Método que se ejecuta antes de que la página se descargue
    /// </summary>
    protected void Page_PreRender()
    {
        Session["ControlAlumno"] = control;
    }
    protected void BtnNuevo_Click(object sender, EventArgs e)
    {
        controlAlumno.SeleccionaNuevo();
        stateAlumno.OpcSeleccionada = "Nuevo";
        MostrarVista();
    }

    protected void MostrarVista()
    {

        switch (stateAlumno.OpcSeleccionada)
        {
            case "Editar":
                DvRegiostro.ChangeMode(DetailsViewMode.Edit);
                EnlazarDetailsView();
                InicializarControles();
                break;

            case "Nuevo":
                DvRegiostro.ChangeMode(DetailsViewMode.Insert);
                DvRegiostro.DataSource = null;
                DvRegiostro.DataBind();
                InicializarControles();
                break;


            case "Actualizar":

                DivFiltros.Visible = true;
                PnlGrid.Visible = true;
                pnlDetailsView.Visible = false;
                EnlazarControlesInicio();

                break;
        }
    }






    private void EnlazarControlesInicio()
    {

      
        EnlazarCategorias();
        controlAlumno.ObtenerTodosAlumnos();
        EnlasarGrid();

        BtnNuevo.Visible = true;
        BtnEliminar.Visible = false;
        BtnRegresar.Visible = false;
        BtnGuardar.Visible = false;

        DivFiltros.Visible = true;
        PnlGrid.Visible = true;
        pnlDetailsView.Visible = false;
        GrdRegistros.SelectedIndex = -1;

    }

    private void EnlazarCategorias()
    {
        DdlCategorias.DataSource = stateAlumno.CategoriasBD;
        DdlCategorias.DataTextField = "Descripcion";
        DdlCategorias.DataValueField = "IdCategoria";
        DdlCategorias.DataBind();
    }

   
      
    

    /// Inicializa los controles para la acción Nuevo y Editar
    /// </summary>
    private void InicializarControles()
    {

        DivFiltros.Visible = false;
        PnlGrid.Visible = false;
        pnlDetailsView.Visible = true;
        BtnGuardar.Visible = true;
        BtnRegresar.Visible = true;


        TextBox TxtPorcentajeVeca = GetTextBox("TxtPorcentajeVeca");

        if (stateAlumno.Usuario.Roll == "Cobrador")
        {
            
            TxtPorcentajeVeca.Enabled = false;
        }


        DropDownList DdlCategoriaActual = GetDropDownList("DdlCategoriaActual");

        DdlCategoriaActual.DataSource = stateAlumno.CategoriasBD;
        DdlCategoriaActual.DataTextField = "Descripcion";
        DdlCategoriaActual.DataValueField = "IdCategoria";
        DdlCategoriaActual.DataBind();


        if (stateAlumno.OpcSeleccionada == "Editar")
        {
            BtnEliminar.Visible = true;
            BtnNuevo.Visible = true;
            BtnVerPagos.Visible = true;
            DdlCategoriaActual.SelectedValue = stateAlumno.Alumno.IdCategoria.ToString();
        }
        if (stateAlumno.OpcSeleccionada == "Nuevo")
        {
            TxtPorcentajeVeca.Text = "0";
            BtnEliminar.Visible = false;
            BtnNuevo.Visible = false;
        }

    }

    private void EnlazarDetailsView()
    {
        ArrayList nuevoReg = new ArrayList();
        nuevoReg.Add(stateAlumno.Alumno);
        DvRegiostro.DataSource = nuevoReg;
        DvRegiostro.DataBind();
    }
    protected void BtnRegresar_Click(object sender, EventArgs e)
    {
        stateAlumno.Imp2 = "";
        if (stateAlumno.VerPago)
        {
            PnlMensualidad.Visible = false; stateAlumno.VerPago = false; BtnVerPagos.Visible = true;
            LblNombre.Visible = false;

            controlAlumno.CampoSeleccionado(GrdRegistros.SelectedRow.DataItemIndex);
            stateAlumno.OpcSeleccionada = "Editar";
            MostrarVista();

        }
        else
        {
            BtnVerPagos.Visible = false;
            controlAlumno.ObtenerTodosAlumnos();
            stateAlumno.OpcSeleccionada = "Actualizar";
            MostrarVista();
        }
    }




    protected void BtnGuardar_Click(object sender, EventArgs e)
    {
        try
        {
            AsignarDatosServicio();
            switch (stateAlumno.OpcSeleccionada)
            {
                case "Nuevo":
                    controlAlumno.SeleccionaGuardar();
                    controlAlumno.CargarInscripcion();
                    Alert("El Registro se agregó satisfactoriamente");
                    stateAlumno.OpcSeleccionada = "Editar";
                    MostrarVista();
                    Regresar();
                    break;
                case "Editar":
                    controlAlumno.SeleccionaModificar();
                    Alert("El Registro se modificó satisfactoriamente");
                    Regresar();

                    break;
            }
        }
        catch (Exception ex)
        {
            Alert(ex.Message);
        }
    }

    private void Regresar()
    {
        stateAlumno.Imp2 = "";
        if (stateAlumno.VerPago)
        {
            PnlMensualidad.Visible = false; stateAlumno.VerPago = false; BtnVerPagos.Visible = true;
            LblNombre.Visible = false;

            controlAlumno.CampoSeleccionado(GrdRegistros.SelectedRow.DataItemIndex);
            stateAlumno.OpcSeleccionada = "Editar";
            MostrarVista();

        }
        else
        {
            BtnVerPagos.Visible = false;
            controlAlumno.ObtenerTodosAlumnos();
            stateAlumno.OpcSeleccionada = "Actualizar";
            MostrarVista();
        }
    }

    private void Alert(string msj)
    {
        // String script = "alert('" + msj + "');";
        // ScriptManager.RegisterStartupScript(this, this.GetType(), "Identifier", script, true);
        Page.ClientScript.RegisterStartupScript(typeof(Page), "Alerta", "<script> javascript:alert('" + msj + "'); </script>");

    }

    private void AsignarDatosServicio()
    {
        if (GrdRegistros.SelectedDataKey != null) stateAlumno.Alumno.IdAlumno = int.Parse(GrdRegistros.SelectedDataKey.Value.ToString());

        stateAlumno.Alumno.Nombre = ((TextBox)GetTextBox("TxtNombre")).Text;
        stateAlumno.Alumno.Direccion = ((TextBox)GetTextBox("TxtDireccion")).Text;
        stateAlumno.Alumno.FechaDeNacimiento = Convert.ToDateTime(((TextBox)GetTextBox("TxtFechaDeNacimiento")).Text);
        stateAlumno.Alumno.NombrePadre = ((TextBox)GetTextBox("TxtNombrePadre")).Text;
        stateAlumno.Alumno.PorcentajeVeca = Convert.ToInt32(((TextBox)GetTextBox("TxtPorcentajeVeca")).Text);
        stateAlumno.Alumno.Telefono = ((TextBox)GetTextBox("TxtTelefono")).Text;
        stateAlumno.Alumno.IdCategoria = int.Parse(GetDropDownList("DdlCategoriaActual").SelectedValue);

    }

    private TextBox GetTextBox(string Control)
    {
        TextBox ctrlT = (TextBox)DvRegiostro.FindControl(Control);
        if (ctrlT == null)
            throw new Exception("GetTextBox: No existe el control " + Control);
        return ctrlT;
    }

    private DropDownList GetDropDownList(string Control)
    {
        DropDownList ctrlD = (DropDownList)DvRegiostro.FindControl(Control);
        if (ctrlD == null)
            throw new Exception("GetDropDownLis: No existe el control " + Control);
        return ctrlD;
    }
    protected void GrdRegistros_SelectedIndexChanged(object sender, EventArgs e)
    {


        controlAlumno.CampoSeleccionado(GrdRegistros.SelectedRow.DataItemIndex);
        stateAlumno.OpcSeleccionada = "Editar";
        MostrarVista();



    }
    protected void BtnEliminar_Click(object sender, EventArgs e)
    {
        try
        {

            if (stateAlumno.Usuario.Roll != "Cobrador")
            {
                BtnVerPagos.Visible = false;
                controlAlumno.SeleccionaEliminar();
                Alert("El Cliente se eliminó satisfactoriamente");
                stateAlumno.OpcSeleccionada = "Actualizar";
                MostrarVista();
            }
        }
        catch (Exception ex)
        {
            Alert(ex.Message);
        }

    }



    protected void GrdRegistros_PreRender(object sender, EventArgs e)
    {

        GrdRegistros.UseAccessibleHeader = true;

        if (GrdRegistros.Rows.Count != 0)
        {

            GrdRegistros.HeaderRow.TableSection = TableRowSection.TableHeader;

        }

    }


    protected void GrdRegistros_DataBound(object sender, EventArgs e)
    {

        if (sender != null)
        {

            GridView _grid = (GridView)sender;

            if (_grid.Rows.Count > 0)
            {

                _grid.UseAccessibleHeader = true;

                _grid.HeaderRow.TableSection = TableRowSection.TableHeader;

            }

        }

    }

    protected void DdlCategorias_SelectedIndexChanged(object sender, EventArgs e)
    {

        controlAlumno.ObtenerAlumnosPorCategoria(DdlCategorias.SelectedValue);
        EnlasarGrid();
    }

    protected void BtnVerPagos_Click(object sender, EventArgs e)
    {

        stateAlumno.VerPago = true;
        pnlDetailsView.Visible = false;
        DivFiltros.Visible = false;
        PnlGrid.Visible = false;
        PnlMensualidad.Visible = true;
        LblNombre.Visible = true;
   
        BtnEliminar.Visible = false;
        BtnGuardar.Visible = false;
        BtnNuevo.Visible = false;
        BtnVerPagos.Visible = false;
        BtnRegresar.Visible = true;
        
        controlAlumno.ObtenerPagosPorAlumno(stateAlumno.Alumno.IdAlumno);
        stateAlumno.Mensualidad.Alumno = stateAlumno.Alumno;
        EnlazarMensualidades();
        LblNombre.Text = stateAlumno.Alumno.Nombre.ToUpper();
        
    }

    private void EnlazarMensualidades()
    {
        GrdMensualidades.DataSource = stateAlumno.Mensualidades;
        GrdMensualidades.DataBind();
    }

    protected void BtnBuscar_Click(object sender, EventArgs e)
    {
        controlAlumno.Buscar(TxtBuscar.Text);
        EnlasarGrid();
    }

    protected void GrdMensualidades_SelectedIndexChanged(object sender, EventArgs e)
    {
       
        controlAlumno.CampoSeleccionadoMes(GrdMensualidades.SelectedRow.DataItemIndex);
       
        
        stateAlumno.Imp = GrdMensualidades.SelectedRow.DataItemIndex.ToString();
        if (stateAlumno.Mensualidad.RecargoPag == null)
        {
           
            controlAlumno.Pagar();
            if (stateAlumno.Imp2 != stateAlumno.Imp)
            {
                ImprimirRecivo();
                stateAlumno.Imp2 = stateAlumno.Imp;
            }
            Alert("El Pago Se realizó Corectamente");
            controlAlumno.ObtenerPagosPorAlumno(stateAlumno.Alumno.IdAlumno);
            EnlazarMensualidades();
        }
         if (stateAlumno.Mensualidad.RecargoPag != null && stateAlumno.Imp2 == stateAlumno.Imp)
             Alert("El Pago Se realizó Corectamente");
        
        }
    

    private void ImprimirRecivo()
    {
        Tike tike = new Tike();
        tike.MaxChar = 36;
        tike.MaxCharDescription = 20;

        
        if (stateAlumno.Mensualidad.Concepto == "")
        {
            tike.AddHeaderLine("  ESCUELA DE FUTBOL TUZOS CARDENAS");
            tike.AddSubHeaderLine("Alumno: " + stateAlumno.Alumno.NombreM);
            tike.AddSubHeaderLine("CATEGORIA: " + stateAlumno.Alumno.CategoriaLiga);
            tike.AddSubHeaderLine("Mensualidad: " + stateAlumno.Mensualidad.MesMensualidad);
            tike.AddSubHeaderLine("Fecha: " + DateTime.Now.ToString());
            tike.AddItem("", "Mensualidad      ", string.Format("{0:c}", stateAlumno.Mensualidad.Monto.MontoMensual));
            if (stateAlumno.Mensualidad.ConRecargo)
                tike.AddItem("", "Recargo          ", string.Format("{0:c}", stateAlumno.Mensualidad.Monto.MontoRecargo));
            
            if (stateAlumno.Mensualidad.ConPagoOportuno)
                tike.AddItem("", "Pago Oportuno    ", "- " + string.Format("{0:c}", stateAlumno.Mensualidad.Monto.PagoOportuno));

            
            decimal Veca = (stateAlumno.Mensualidad.Monto.MontoMensual * stateAlumno.Alumno.PorcentajeVeca / 100);
            if (stateAlumno.Alumno.PorcentajeVeca != 0)
                tike.AddItem("", "Decuento Beca   ", "- " +  string.Format("{0:c}", Veca));

            decimal Oportuno = 0;
            decimal recargo = 0;
            if (stateAlumno.Mensualidad.ConPagoOportuno) Oportuno = stateAlumno.Mensualidad.Monto.PagoOportuno; else Oportuno = 0;
            if (stateAlumno.Mensualidad.ConRecargo) recargo = stateAlumno.Mensualidad.Monto.MontoRecargo; else recargo = 0;

            tike.AddTotal("      TOTAL: ", string.Format("{0:c}", recargo + stateAlumno.Mensualidad.CantidadAPagar - Veca - Oportuno));
           
              


            tike.AddFooterLine("Gracias Por su Pago Puntual.");
           
           // tike.PrintTicket("Microsoft XPS Document Writer");
              tike.PrintTicket("Generic / Text Only");
          //  tike.PrintTicket("Microsoft XP");
           
        }
        else
        {
            tike.AddHeaderLine("  ESCUELA DE FUTBOL TUZOS CARDENAS");
            tike.AddSubHeaderLine("Alumno: " + stateAlumno.Alumno.Nombre);
            tike.AddSubHeaderLine("Mensualidad: " + stateAlumno.Mensualidad.MesMensualidad);
            tike.AddSubHeaderLine("Fecha: " + DateTime.Now.ToString());
            tike.AddItem("", "Inscripción      ", string.Format("{0:c}", stateAlumno.Mensualidad.Monto.Inscripcion));

            tike.AddTotal("      TOTAL: ", string.Format("{0:c}", stateAlumno.Mensualidad.Monto.Inscripcion));
            tike.AddFooterLine("Gracias Por su Pago Puntual.");
           
            // tike.PrintTicket("Microsoft XPS Document Writer");
               tike.PrintTicket("Generic / Text Only");
           //  tike.PrintTicket("Microsoft XP");

              
            
        }
          
        





    }
    protected void DdlAnyo_SelectedIndexChanged(object sender, EventArgs e)
    {
        controlAlumno.ObtenerAlumnosPorAnyo(DdlAno.SelectedValue);
        EnlasarGrid();
    }
    protected void IbtnImprimirLista_Click(object sender, ImageClickEventArgs e)
    {
        this.Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "Alerta", "<script>       window.open('../RegistroPrincipal/Deudores3.aspx','', 'resizable=1,scrollbars=1,status=no,statusbar=no, toolbar=no, location=no, menubar=no');         </script>");

    }
    protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
    {
            DateTime Inicio = DateTime.Parse(TxtFechaIncio.Text);
            DateTime Fin = DateTime.Parse(TxtFechaFin.Text);
            PerAlumno peralumno  = new PerAlumno();
            stateAlumno.Mensualidades = peralumno.ObtenerPagosPorFechas(Inicio, Fin);
            this.Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "Alerta", "<script>       window.open('../RegistroPrincipal/Deudores2.aspx','', 'resizable=1,scrollbars=1,status=no,statusbar=no, toolbar=no, location=no, menubar=no'); </script>");
    }
    protected void IbtnImprimirAlumnos_Click(object sender, ImageClickEventArgs e)
    {
        this.Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "Alerta", "<script>       window.open('../RegistroPrincipal/Deudores.aspx','', 'resizable=1,scrollbars=1,status=no,statusbar=no, toolbar=no, location=no, menubar=no'); </script>");
    }
}
